/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.itschapala.dsw2.biblioteca8a.bl;

import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.itschapala.dsw2.biblioteca8a.dao.DetallePrestamoDaoLocal;
import mx.itschapala.dsw2.biblioteca8a.dao.PrestamoDaoLocal;
import mx.itschapala.dsw2.biblioteca8a.enumeracion.EstadoDetallePrestamo;
import mx.itschapala.dsw2.biblioteca8a.enumeracion.EstadoPrestamo;
import mx.itschapala.dsw2.biblioteca8a.enumeracion.EstadoServicio;
import mx.itschapala.dsw2.biblioteca8a.modelo.DetallePrestamo;
import mx.itschapala.dsw2.biblioteca8a.modelo.Libro;
import mx.itschapala.dsw2.biblioteca8a.modelo.Prestamo;
import mx.itschapala.dsw2.biblioteca8a.modelo.Usuario;

/**
 *
 * @author z
 */
@Stateless
public class PrestamoBl implements PrestamoBlLocal {

@EJB
    private DetallePrestamoDaoLocal detallePrestamoDao;
    @EJB
    private PrestamoDaoLocal prestamoDao;

    @Override
    public EstadoServicio lendBooks(Usuario user, List<Libro> books) {
        
       List<Prestamo>prestamos=prestamoDao.findIncompleteByUser(user);
       
       int available =3;
        for(Prestamo p : prestamos){
           available=available - detallePrestamoDao.findLends(p).size();
        }
            if(available<=0 || user.getId()==null || books.isEmpty() || books.size()>available){
    return EstadoServicio.INCOMPLETE;
}
            else{
                Prestamo p = new Prestamo();
                p.setIdusuario(user);
                p.setFecha(new Date());
                p.setHora(new Date());
                p.setEstado(EstadoPrestamo.OPEN.ordinal());
                prestamoDao.create(p);
                for (Libro l : books){
                DetallePrestamo dp = new DetallePrestamo();
                dp.setIdprestamo(p);
               dp.setIdlibro(l);
                dp.setEstado(EstadoDetallePrestamo.LEND.ordinal());
                detallePrestamoDao.create(dp);
                }
                
                return EstadoServicio.COMPLETE;
            }
       
    }
   public List<Prestamo> getAll() {
        return prestamoDao.findAll();
    }
   public Prestamo findById(int id) {
        return prestamoDao.find(id);
    }
   
}
